package util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Util {
    private static SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");

    public static String dateToString(Date data) {
        return dateFormat.format(data);
    }

    public static Date stringToDate(String data) throws ParseException {
            return dateFormat.parse(data);
    }
    /*
     * Pega o dia de uma data inserida em string no formato dd/MM/yyyy
     * retorna valores de 0 a 30
     * verifica se o dia é válido no mês/ano dado
     */
    public static int getDay(String data) throws ParseException {
        String[] str = data.split("/");
        if (str.length < 3){
            throw new ParseException("Erro na conversão da data", 1);
        }
        int dia = Integer.parseInt(str[0]);
        int mes = Integer.parseInt(str[1]);
        int ano = Integer.parseInt(str[2]);
        if (dia > 31 || dia < 1){
            throw new ParseException("Erro na conversão da data", 1);
        }
        if ( new GregorianCalendar().isLeapYear(ano)){
            if (mes == 2 && dia>29) {
                throw new ParseException("Erro na conversão da data", 1);
            }
        }else if (mes == 2 && dia > 28) {
            throw new ParseException("Erro na conversão da data", 1);
        }
        if ((mes == 4 || mes == 6 || mes == 9 || mes == 11) && (dia >30)) {
            throw new ParseException("Erro na conversão da data", 1);
        }            
        return dia;
    }
    public static int getMonth(String data) throws ParseException {
        String[] str = data.split("/");
        if (str.length < 3){
            throw new ParseException("Erro na conversão da data", 1);
        }
        int dia = Integer.parseInt(str[0]);
        int mes = Integer.parseInt(str[1]);
        int ano = Integer.parseInt(str[2]);
        if (mes > 12 || mes < 1) {
            throw new ParseException("Erro na conversão da data", 1);
        }
        return mes -1;
    }
    public static int getYear(String data) throws ParseException {
        String[] str = data.split("/");
        if (str.length < 3){
            throw new ParseException("Erro na conversão da data", 1);
        }
        int dia = Integer.parseInt(str[0]);
        int mes = Integer.parseInt(str[1]);
        int ano = Integer.parseInt(str[2]);
        if (ano < 1901 || ano > 2099) {
            throw new ParseException("Erro na conversão da data", 1);
        }
        return ano;
    }
    public static Date validaData(String data) throws ParseException {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.DAY_OF_MONTH, getDay(data));
        c.set(Calendar.MONTH, getMonth(data));
        c.set(Calendar.YEAR, getYear(data));
        return c.getTime();
    }
}
